package com.dahuyou.tryy.too.simulate.interpreter.instructions.base;

import com.dahuyou.tryy.too.simulate.interpreter.runtime.area.Frame;

public interface Instruction {

    /**
     * 获取操作数 比如IADD 就需要从栈顶获取2个整数,当然并不是所有的指令都需要这个操作，比如iconst_0，只需要将整数0压倒栈顶，并不需要从栈顶获取任何数据以供execute方法使用
     * @param reader
     */
    void fetchOperands(BytecodeReader reader);

    /**
     * 执行操作，如IADD，就是执行具体的相加操作了
     * @param frame
     */
    void execute(Frame frame);

    static void branch(Frame frame, int offset) {
        int pc = frame.thread().pc();
        int nextPC = pc + offset;
        frame.setNextPC(nextPC);
    }

}
